1 package org.apache.maven.surefire.junitcore;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Collection;
23 import java.util.concurrent.ConcurrentLinkedQueue;
24
25 import org.apache.maven.surefire.report.ConsoleOutputReceiver;
26 import org.apache.maven.surefire.util.internal.ByteBuffer;
27
28
29
30
31 public final class LogicalStream
32 {
33 private final Collection<Entry> output = new ConcurrentLinkedQueue<Entry>();
34
35 static final class Entry
36 {
37 final boolean stdout;
38
39 final byte[] b;
40
41 final int off;
42
43 final int len;
44
45 Entry( boolean stdout, byte[] b, int off, int len )
46 {
47 this.stdout = stdout;
48 this.b = ByteBuffer.copy( b, off, len );
49 this.off = 0;
50 this.len = len;
51 }
52
53 public void writeDetails( ConsoleOutputReceiver outputReceiver )
54 {
55 outputReceiver.writeTestOutput( b, off, len, stdout );
56 }
57
58 @Override
59 public String toString()
60 {
61 return new String( b, off, len );
62 }
63
64 public boolean isBlankLine()
65 {
66 return "\n".equals( toString() );
67 }
68 }
69
70 public synchronized void write( boolean stdout, byte b[], int off, int len )
71 {
72 Entry entry = new Entry( stdout, b, off, len );
73 if ( !entry.isBlankLine() )
74 {
75 output.add( entry );
76 }
77 }
78
79 public synchronized void writeDetails( ConsoleOutputReceiver outputReceiver )
80 {
81 for ( Entry entry : output )
82 {
83 entry.writeDetails( outputReceiver );
84 }
85 }
86 }